/**
 * ETSDB - 鸿蒙系统上的移动数据库
 * 专为鸿蒙系统设计的轻量级、高性能本地数据库
 * 
 * @module etsdb
 */

import Database from './Database';
import Model from './Model';
import Config from './Config';
import Utils from './Utils';
import { ObjectId } from './Utils';

// 数据库实例缓存
const dbInstances = new Map();

/**
 * ETSDB 主模块
 */
const etsdb = {
  /**
   * 打开数据库连接
   * @param {Object} options - 数据库配置选项
   * @param {string} options.name - 数据库名称，默认为 'default'
   * @param {string} options.encryptionKey - 加密密钥（可选）
   * @param {boolean} options.inMemory - 是否使用内存数据库，默认为 false
   * @returns {Promise<Database>} 数据库实例
   */
  open: async function(options = {}) {
    const config = new Config(options);
    const cacheKey = `${config.name}_${config.inMemory ? 'memory' : 'disk'}`;
    
    // 检查缓存中是否已有相同配置的数据库实例
    if (dbInstances.has(cacheKey)) {
      return dbInstances.get(cacheKey);
    }
    
    // 创建新的数据库实例
    const db = new Database(config);
    await db.init();
    
    // 缓存数据库实例
    dbInstances.set(cacheKey, db);
    
    return db;
  },
  
  /**
   * 定义数据模型
   * @param {string} name - 模型名称
   * @param {Object} schema - 模型架构定义
   * @returns {Model} 模型类
   */
  defineModel: function(name, schema) {
    return Model.define(name, schema);
  },
  
  /**
   * 生成唯一的ObjectId
   * @returns {string} ObjectId字符串
   */
  generateObjectId: function() {
    return new ObjectId().toString();
  },
  
  /**
   * 关闭所有数据库连接
   */
  closeAll: function() {
    dbInstances.forEach(db => db.close());
    dbInstances.clear();
  },
  
  /**
   * 删除数据库文件
   * @param {string} name - 数据库名称
   * @returns {Promise<boolean>} 是否删除成功
   */
  deleteDatabase: async function(name = 'default') {
    const config = new Config({ name });
    return await Utils.deleteDatabase(config.path);
  }
};

// 导出模块
export default etsdb;
export { ObjectId };